<?php

/**
 * 自定义基础函数库
 * @$Author: alone
 * @$Id: custom_func.php
 */

include('func_ext.php');

/**
 * 清空数据库表
 * 参数可以是一个数组也可以是单个表
 *
 * @param   mix  $table    表名 array或者string
 * @return  bool     如果清空表成功，返回true;
 */
function truncate_table($table){
	if(is_array($table)){
		foreach($table as $val){
			$sql = "TRUNCATE $val";
			dbQ($sql,false);
		}
	}else{
		$sql = "TRUNCATE $table";
		dbQ($sql,false);
	}

	return true;
}

/**
 * 查询数据库
 * 向数据库发送一条查询
 *
 * @param   string  $sql    一条sql语句
 * @param   bool  $show    是否显示查询影响行数
 * @return  bool     如果成功，返回true; 否则,返回false
 */
function dbQ($sql,$show=true){
	if(is_string($sql)){
		$rs = mysql_query($sql) or  die("<br><font color=red>".mysql_error()."</font><hr>".$sql);
		if($show){
			if(strtoupper(substr($sql,0,6)) != "SELECT"){
				echo " <font color=red>该查询影响 ".mysql_affected_rows()." 行</font><br>";
			}else{
				echo " <font color=red>该查询影响 ".mysql_num_rows($rs)." 行</font><br>";
			}
		}
		return $rs;
	}else{
		return false;
	}
}


/**
 * 取得插入的sql字符串语句
 *
 * @param   array  $aMap    字段数组
 * @param   bool  $to    目标表名
 * @param   bool  $from   源表名
 * @param   string  $where   where查询条件语句
 * @return  bool     如果成功，返回true; 否则,返回false
 */
function getInsertSQL($aMap,$to,$from,$where){
	if(!is_array($aMap)){
		return false;
	}else{
		$colStr = '( ';
		$valStr = ' ';
		foreach($aMap as $col=>$val){
			if(empty($val)) continue;
			$colStr .= '`'.$col.'`,';
			if(is_numeric($val)){
				$valStr .= "'".$val."',";
			}else{
				$valStr .= $val.",";
			}
		}
		//
		$colStr = rtrim($colStr,",").")";
		$valStr = rtrim($valStr,",")." ";
	}

	$sql = "INSERT INTO `".$to."` ".$colStr." SELECT ".$valStr." FROM ".$from." WHERE ".$where;

	return $sql;
}

/**
 * 修正cat_path的路径
 *
 *
 */
function rebuilidCatPath(){
	//修正cat_path
	//要根据cat_id进行排序，保证子分类要出现在母分类之后
	$sql = "select cat_id,parent_id,cat_path from sdb_goods_cat order by cat_id ASC";
	$rs = $this->dbQ($sql);
	while($row = mysql_fetch_array($rs)){
		//母分类

		if($row['parent_id'] == 0){
			$data['cat_path'][$row['cat_id']] = ',';
		}else{
			$data['cat_path'][$row['cat_id']] = $row['parent_id'].',';
			if($data['cat_path'][$row['parent_id']] != ',')
			$data['cat_path'][$row['cat_id']] = $data['cat_path'][$row['parent_id']].$data['cat_path'][$row['cat_id']];
		}
		$sql = "update sdb_goods_cat set cat_path='{$data['cat_path'][$row['cat_id']]}' where cat_id='{$row['cat_id']}'";
		if ($this->dbQ($sql,false)) return true
		else return false

	}
}

/**
 * 检查某个目录的文件是否可读（不包括子目录）
 * 前提：$dirname 是目录且存在且可读
 *
 * @param   string  $dirname    目录名：以 / 结尾，以 / 分隔
 * @return  mix     如果所有文件可读，返回true；否则，返回第一个不可读的文件名
 */
function check_files_readable($dirname)
{
    /* 遍历文件，检查文件是否可读 */
    if ($dh = opendir($dirname))
    {
        while (($file = readdir($dh)) !== false)
        {
            if (filetype($dirname . $file) == 'file' && strtolower($file) != 'thumbs.db')
            {
                if (file_mode_info($dirname . $file) & 1 != 1)
                {
                    return $dirname . $file;
                }
            }
        }
        closedir($dh);
    }

    // 全部可读的返回值
    return true;
}

/**
 * 把一个目录的文件复制到另一个目录（不包括子目录）
 * 前提：$from_dir 是目录且存在且可读，$to_dir 是目录且存在且可写
 *
 * @param   string  $from_dir   源目录
 * @param   string  $to_dir     目标目录
 * @param   string  $file_prefix    文件名前缀
 * @return  mix     成功返回true，否则返回第一个失败的文件名
 */
function copy_files($from_dir, $to_dir, $file_prefix = '')
{
    /* 遍历并复制文件 */
    if ($dh = opendir($from_dir))
    {
        while (($file = readdir($dh)) !== false)
        {
            if (filetype($from_dir . $file) == 'file' && strtolower($file) != 'thumbs.db')
            {
                if (!copy($from_dir . $file, $to_dir . $file_prefix . $file))
                {
                    return $from_dir . $file;
                }
            }
        }
        closedir($dh);
    }

    /* 全部复制成功，返回true */
    return true;
}

/**
 * 把一个目录的文件复制到另一个目录（包括子目录）
 * 前提：$from_dir 是目录且存在且可读，$to_dir 是目录且存在且可写
 *
 * @param   string  $from_dir   源目录
 * @param   string  $to_dir     目标目录
 * @param   string  $file_prefix 文件前缀
 * @return  mix     成功返回true，否则返回第一个失败的文件名
 */
function copy_dirs($from_dir, $to_dir, $file_prefix = '')
{
    $result = true;
    if(! is_dir($from_dir))
    {
        die("It's not a dir");
    }
    if(! is_dir($to_dir))
    {
        if(! mkdir($to_dir, 0700))
        {
            die("can't mkdir");
        }
    }
    $handle = opendir($from_dir);
    while(($file = readdir($handle)) !== false)
    {
        if($file != '.' && $file != '..')
        {
            $src = $from_dir . DIRECTORY_SEPARATOR . $file;
            $dtn = $to_dir . DIRECTORY_SEPARATOR . $file_prefix . $file;
            if(is_dir($src))
            {
                copy_dirs($src, $dtn);
            }
            else
            {
                if(! copy($src, $dtn))
                {
                    $result = false;
                    break;
                }
            }
        }
    }
    closedir($handle);
    return $result;
}

?>